#pragma once

#include <AVUIGradientBrush.h>

namespace AVUI {

class TileBrush : public Brush
{
public:
    TileBrush() { };
    ~TileBrush() { };

    DECLARE_ELEMENT(TileBrush, Brush);

    DECLARE_DEPENDENCY_PROPERTY(Viewbox);
    Rect get_Viewbox() { return AVUI::UnboxValue<Rect>(GetValue(get_ViewboxProperty())); }
    void set_Viewbox(const Rect& value) { SetValue(get_ViewboxProperty(), AVUI::BoxValue(value)); } 

    DECLARE_DEPENDENCY_PROPERTY(Viewport);
    Rect get_Viewport() { return AVUI::UnboxValue<Rect>(GetValue(get_ViewportProperty())); }
    void set_Viewport(const Rect& value) { SetValue(get_ViewportProperty(), AVUI::BoxValue(value)); } 

    DECLARE_DEPENDENCY_PROPERTY(ViewboxUnits);
    BrushMappingMode::Enum get_ViewboxUnits() { return (BrushMappingMode::Enum)(AVUI::UnboxValue<int>(GetValue(get_ViewboxUnitsProperty()))); }
    void set_ViewboxUnits(BrushMappingMode::Enum value) { SetValue(get_ViewboxUnitsProperty(), AVUI::BoxValue<int>(value)); } 

    DECLARE_DEPENDENCY_PROPERTY(ViewportUnits);
    BrushMappingMode::Enum get_ViewportUnits() { return (BrushMappingMode::Enum)(AVUI::UnboxValue<int>(GetValue(get_ViewportUnitsProperty()))); }
    void set_ViewportUnits(BrushMappingMode::Enum value) { SetValue(get_ViewportUnitsProperty(), AVUI::BoxValue<int>(value)); } 

    DECLARE_DEPENDENCY_PROPERTY(Stretch);
    Stretch::Enum get_Stretch() { return (Stretch::Enum) AVUI::UnboxValue<int>(GetValue(get_StretchProperty())); }
    void set_Stretch(Stretch::Enum value) { SetValue(get_StretchProperty(), AVUI::BoxValue<int>(value)); } 

    DECLARE_DEPENDENCY_PROPERTY(TileMode);
    TileMode::Enum get_TileMode() { return (TileMode::Enum)(AVUI::UnboxValue<int>(GetValue(get_TileModeProperty()))); }
    void set_TileMode(TileMode::Enum value) { SetValue(get_TileModeProperty(), AVUI::BoxValue<int>(value)); } 

    DECLARE_DEPENDENCY_PROPERTY(AlignmentX);
    AlignmentX::Enum get_AlignmentX() { return (AlignmentX::Enum)(AVUI::UnboxValue<int>(GetValue(get_AlignmentXProperty()))); }
    void set_AlignmentX(AlignmentX::Enum value) { SetValue(get_AlignmentXProperty(), AVUI::BoxValue<int>(value)); } 

    DECLARE_DEPENDENCY_PROPERTY(AlignmentY);
    AlignmentY::Enum get_AlignmentY() { return (AlignmentY::Enum)(AVUI::UnboxValue<int>(GetValue(get_AlignmentYProperty()))); }
    void set_AlignmentY(AlignmentY::Enum value) { SetValue(get_AlignmentYProperty(), AVUI::BoxValue<int>(value)); } 

private:
    static void StaticConstructor();
};

typedef TRefCountedPtr<TileBrush> TileBrushPtr;

}; // namespace AVUI

